//
//  ArchitectureViewController.m
//  LearnDemo
//
//  Created by 龙 on 2018/5/21.
//  Copyright © 2018年 longlong. All rights reserved.
//

#import "ArchitectureViewController.h"

@interface ArchitectureViewController ()

@end

@implementation ArchitectureViewController

#pragma mark - Life Cycle

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    
    /*
     不要在viewDidLoad里面初始化你的view然后再add，这样代码就很难看。在viewDidload里面只做addSubview的事情，
     至于属性的初始化，则交给getter去做。
     这样即便在属性非常多的情况下，还是能够保持代码整齐，view的初始化都交给getter去做了
     */
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


#pragma mark - UITableViewDelegate
#pragma mark - Custom Delegate
/*
 比如UITableViewDelegate的方法集就老老实实写上#pragma mark - UITableViewDelegate。
 这样有个好处就是，当其他人阅读一个他并不熟悉的Delegate实现方法时，他只要按住command然后去点这个protocol名字，Xcode就能够立刻跳转到对应这个Delegate的protocol定义的那部分代码去，就省得他到处找了。
 */

#pragma mark - Event Response



#pragma mark - Private Methods
/*
 正常情况下ViewController里面一般是不会存在private methods的，这个private methods一般是用于日期换算、图片裁剪啥的这种小功能。
 这种小功能要么把它写成一个category，要么把他做成一个模块，哪怕这个模块只有一个函数也行。
 
 ViewController基本上是大部分业务的载体，本身代码已经相当复杂，所以跟业务关联不大的东西能不放在ViewController里面就不要放。
 另外一点，这个private method的功能这时候只是你用得到，但是将来说不定别的地方也会用到，一开始就独立出来，有利于将来的代码复用。
 */





#pragma mark - Getters And Setters
/*
 因为一个ViewController很有可能会有非常多的view，就像上面给出的代码样例一样，
 如果getter和setter写在前面，就会把主要逻辑扯到后面去，其他人看的时候就要先划过一长串getter和setter，这样不太好。
 然后要求业务工程师写代码的时候按照顺序来分配代码块的位置，先是life cycle，然后是Delegate方法实现，然后是event response，然后才是getters and setters。
 这样后来者阅读代码时就能省力很多。
 */


@end

/*
 1、所有的属性都使用getter和setter
 2、getter和setter全部都放在最后
 3、每一个delegate都把对应的protocol名字带上，delegate方法不要到处乱写，写到一块区域里面去
 4、Event Response专门开一个代码区域
 5、关于private methods，正常情况下ViewController里面不应该写
 */

